Prima di provare il debug usare la Struttura di Test (test framework - macro) per verificare se i test standard funzionano correttamente. Se non funzionano, è possibile che l'installazione sia danneggiata.
Il debug di FreeCAD è supportato da alcuni meccanismi interni. La versione a riga di comando di FreeCAD fornisce delle opzioni di supporto del debug:
Queste sono le opzioni attualmente riconosciute in FreeCAD 0.19:
Opzioni generiche:
-v [ --version ] Stampa la stringa della versione -h [ --help ] Stampa un messaggio di aiuto -c [ --console ] Si avvia in modalità console --response-file arg Può essere specificato anche con '@name' --dump-config Scarica la configurazione --get-config arg Stampa il valore della chiave di configurazione richiesta
Configurazione:
-l [ --write-log ] Scrive un file di registro in: $HOME/.local/share/FreeCAD/FreeCAD.log (Linux) $HOME/Libreria/Applicazione\Supporto/FreeCAD/FreeCAD.log (macOS) %APPDATA%\FreeCAD\FreeCAD.log (Windows) --log-file arg Diversamente da --write-log, questo consente di accedere a un file archivio arbitrario -u [ --user-cfg ] arg File di configurazione utente per caricare/salvare le impostazioni utente -s [ --system-cfg ] arg File di configurazione del sistema per caricare/salvare le impostazioni di sistema -t [ --run-test ] arg Test case - o 0 per tutti -M [ --module-path ] arg Percorsi di moduli aggiuntivi -P [ --python-path ] arg Percorsi Python aggiuntivi --single-instance Consente di eseguire una singola istanza dell'applicazione
Se si esegue una versione sperimentale di FreeCAD ancora in fase sviluppo, essa potrebbe "bloccarsi". Si può aiutare gli sviluppatori a risolvere questi problemi fornendo loro un "backtrace". Per fare questo, è necessario eseguire un "debug build" del software. "Debug build" è un parametro che viene impostato al momento della compilazione, perciò bisogna auto-compilare FreeCAD, oppure ottenere una versione "debug" precompilata.
Linux Debugging →
Prerequisiti:
Passaggi:
Immettere quanto segue nella finestra del terminale:
Trovare il codice binario di FreeCAD sul proprio sistema:
$ whereis freecad
freecad: /usr/local/freecad <--- for example
$ cd /usr/local/freecad/bin
$ gdb FreeCAD
LLDB produrrà alcune informazioni di inizializzazione. Il (lldb) mostra che il debugger è in esecuzione nel terminale, ora inserisci::
(gdb) handle SIG33 noprint nostop
(gdb) run
FreeCAD verrà avviato. Effettuare le operazioni che causano il crash o il blocco di FreeCAD, quindi immettere 'bt' nella finestra del terminale.
(gdb) bt
Questo genera una lunga lista che descrive esattamente ciò che il programma stava facendo quando è andato in crash o in blocco. Includere questa lista nel vostro rapporto sul problema.
(gdb) bt full
Stampa anche i valori delle variabili locali. Questo può essere combinato con un numero per limitare il numero di frame mostrati.
macOSX Debugging →
Prerequisiti:
Passaggi:
Immettere quanto segue nella finestra del terminale:
$ cd FreeCAD/bin
$ lldb FreeCAD
LLDB produrrà alcune informazioni di inizializzazione. Il (lldb) mostra che il debugger è in esecuzione nel terminale, ora inserisci:
(lldb) run
Ora FreeCAD viene avviato. Effettuare le operazioni che causano il crash o il blocco di FreeCAD, quindi immettere 'bt' nella finestra del terminale.
(lldb) bt
Questo genera una lunga lista che descrive esattamente ciò che il programma stava facendo quando è andato in crash o in blocco. Includere questa lista nel vostro rapporto sul problema.
(Applicabile a Linux e macOS)
A volte è utile capire quali librerie sta caricando FreeCAD, in particolare se ci sono più librerie caricate con lo stesso nome ma versioni diverse (collisione di versioni). Per vedere quali librerie vengono caricate da FreeCAD quando si arresta in modo anomalo, è necessario aprire un terminale ed eseguirlo nel debugger. In una seconda finestra del terminale, scopri l'id del processo di FreeCAD:
ps -A | grep FreeCAD
Usa l'id restituito e passalo a lsof
:
lsof -p process_id
Questo stampa un lungo elenco di risorse caricate. Quindi, ad esempio, se si tenta di verificare se è caricata più di una versione della libreria Coin3d, scorrere l'elenco o cercare direttamente Coin nell'output:
lsof -p process_id | grep Coin
Per un approccio più moderno al debug di Python, almeno su Windows, vedere questo
winpdb Debugging →
Ecco un esempio dell'uso di "Winpdb" all'interno di FreeCAD:
E' necessario il debugger di Python: "Winpdb". Se non lo è installato, su Ubuntu/Debian installarlo con:
sudo apt-get install winpdb
Questo consente di impostare il debugger.
Ora si esegua uno script Python di prova in FreeCAD passo dopo passo.
import rpdb2
rpdb2.start_embedded_debugger("test")
import FreeCAD
import Part
import Draft
print "hello"
print "hello"
import Draft
points=[FreeCAD.Vector(-3.0,-1.0,0.0),FreeCAD.Vector(-2.0,0.0,0.0)]
Draft.makeWire(points,closed=False,face=False,support=None)
VS Code Debugging →
Prerequisiti:
# In a cmd window that has a path to you local Python 3:
pip install ptvsd
# Then if your Python is installed in C:\Users\<userid>\AppData\Local\Programs\Python\Python37
# and your FreeCAD is installed in C:\freecad\bin
xcopy "C:\Users\<userid>\AppData\Local\Programs\Python\Python37\Lib\site-packages\ptvsd" "C:\freecad\bin\Lib\site-packages\ptvsd"
Documentazione di Visual Studio Code per il debug remoto
Passi:
import ptvsd
print("Waiting for debugger attach")
# 5678 is the default attach port in the VS Code debug configurations
ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True)
ptvsd.wait_for_attach()
"configurations": [ { "name": "Python: Attacher", "type": "python", "request": "attach", "port": 5678, "host": "localhost", "pathMappings": [ { "localRoot": "${workspaceFolder}", "remoteRoot": "." } ] },
from sys import path
sys.path.append('/path/to/site-packages')
Dove si trova il percorso della directory in cui è stato installato ptvsd.
Nel package Mac è /Applications/FreeCAD.App/Contents/Resources/bin/python.
E' possibile individuarlo sul proprio sistema digitando
import sys
print(sys.executable)
nella console Python di FreeCAD.
LiClipse Debugging →
> ./your location/FreeCAD_xxx.AppImage --appimage-extract
> cd squashfs-root/
squashfs-root> ./usr/bin/freecadcmd
your loc/squashfs-root/usr/bin/python
.pydevd.py
nella tua installazione di liclipse.
your location/liclipse/plugins/org.python.pydev.xx/pysrc
.import sys; sys.path.append("path ending with /pysrc")
import pydevd; pydevd.settrace()
squashfs-root> ./usr/bin/freecad
pydevd.settrace()
) da freecad, come si farebbe normalmente.Vedere l'articolo principale su Pyzo.
Per gli sviluppatori che hanno bisogno di approfondire il kernel OpenCasCade, l'utente @abdullah ha creato un thread di orientamento che spiega come farlo.